package role;

import gui.GUI;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.ListIterator;

/*
 * ==UML
 * Methoden fertig
 */
/**
 * 
 * @author Gero Kraus
 * @author David Lepach
 * 
 */
public class RoleFactory
{
	private static ArrayList<Role> roles = new ArrayList<Role>();

	public static ArrayList<Role> getRoles()
	{
		if (roles.isEmpty()) // Fügt bei erstem Aufruf Standardrolle hinzu
			roles.add(new Role());
		return roles;
	}

	public static void addRole(Role r)
	{
		r.setStudent(null);
		if (roles.contains(r))
			return;
		roles.add(r);
		return;
	}

	public static boolean editRole(int index, String name, String comment)
	{

		for (int i = 0; i < roles.size(); i++)
		{

			if (name.equals(roles.get(i).getName()) && (i != index))
			{
				System.out.println("Rollename schon vergeben!"); // kann nocht
																	// zu Rolle
																	// geändert
																	// werden!!!
				return false;
			}
		}

		roles.get(index).setName(name);
		roles.get(index).setComment(comment);
		return true;
	}

	public static void replaceRole(Role r, int index)
	{
		r.setStudent(null);

		for (int i = 0; i < roles.size(); i++)
		{
			if (r.equals(roles.get(i)))
			{
				GUI.statusausgabe("Element schon vorhanden!");
				return;
			}
			if (r.getName().equals(roles.get(i).getName()))
			{
				GUI.statusausgabe("Rolle schon vergeben!");
				return;
			}
		}

		if (r.getName() != null)
		{
			roles.set(index, r);
		}
	}
	
	public static void replace(Role oldrole,Role newrole){
		
		ListIterator<Role> rolesIter = roles.listIterator();
		while(rolesIter.hasNext()){
			if(rolesIter.next().isSameRole(oldrole))
			{			
				rolesIter.set(newrole);				
			}
		}
		
	}
	
	public static boolean contains(Role role){
		
		Iterator<Role> iter = roles.iterator();
		while(iter.hasNext()){
			if(iter.next().isSameRole(role)){
				return true;
			}
		}
		return false;
	}

	public static Role getStandardRole(){
		
		Role stdrole = new Role();
		stdrole.setComment(roles.get(0).getComment());
		stdrole.setName(roles.get(0).getName());
		return stdrole;
		
	}
	
}
